package controller;

import com.webserver.http.HttpRequest;
import com.webserver.http.HttpResponse;
import com.webserver.vo.User;

import java.io.*;

/**
 * 用来处理和用户相关的业务操作
 */
public class UserController {
    //保存所有用户信息的目录的名字
    private static String userDirName="./users/";

    static {
        File uesrDis=new File(userDirName);

        if(!uesrDis.exists()){
            uesrDis.mkdirs();
        }
    }
    /**
     * 用来处理用户注册操作
     * @param request
     * @param response
     */
        public void reg(HttpRequest request,HttpResponse response){  ;
            System.out.println("开始处理用户注册...");
            //1从request中获取用户表单上的注册信息
            String username=request.getParameter("username");
            String password=request.getParameter("password");
            String nickname=request.getParameter("nickname");
            String ageStr=request.getParameter("age");
            System.out.println(username+" "+password+" "+nickname+" "+ageStr);
            //必要的验证工作,保证注册的信息不能为空,否则只响应注册失败的提示页面
            //失败页面:reg_error.html 居中显示一行文字:注册失败,输入信息有误,请重新注册
            if(username==null||password==null||nickname==null||ageStr==null||
                    !(ageStr.matches("[0-9]+"))){
                response.setEntity(new File("./webapps/myweb/reg_error.html"));
                return;
            }
            /*
             判断是否为重复用户,如果重复用户则直接响应页面:reg_have_user.html
             该页面居中显示一行字,:该用户预存在,请重新户注册
             */
            File file=new File(userDirName+username+".obj");
            if(file.exists()){
                response.setEntity(new File("./webapps/myweb/reg_have_user.html"));
                return;
            }
                int age=Integer.parseInt(ageStr);

                //2将该用户信息写入磁盘保存
                User user=new User(username,password,nickname,age);
                try(
                        ObjectOutputStream oos=new ObjectOutputStream(
                                 new FileOutputStream(file)
                        )
                ){
                    oos.writeObject(user);
                    //注册成功
                    response.setEntity(new File("./webapps/myweb/reg_success.html"));

                }catch(IOException e){
                    e.printStackTrace();
                }


                //3设置response响应注册结果页面
                System.out.println("用户注册处理完毕!!!!");
            }
    public void login(HttpRequest request,HttpResponse response){
        System.out.println("用户开始登录");
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        if(username==null||password==null){
            response.setEntity(new File("./webapps/myweb/login_error.html"));
            return;
        }
        File userFile=new File(userDirName+username+".obj");
        if(userFile.exists()){
            try (

                ObjectInputStream ois=new ObjectInputStream(
                        new FileInputStream(userFile))
                ){

                User user=(User)ois.readObject();

                if(user.getPassword().equals(password)){
                    response.setEntity(new File("./webapps/myweb/login_success.html"));
                    System.out.println("客户登录成功");
                    return;
                }
            }catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        response.setEntity(new File("./webapps/myweb/login_fail.html"));
    }
}
